#ifndef VNAV_VN_CHAKRA_WORLD_H
#define VNAV_VN_CHAKRA_WORLD_H

#include "implementations/RoadNetwork.h"
#include "interfaces/entity/IChakraEntity.h"
#include "interfaces/updater/IUpdater.h"
#include <hash_map>
#include <utility>

/*#include "implementations/EventQueue.h"*/

namespace chakra
{
	typedef std::vector<IUpdater*> Updaters;
	typedef stdext::hash_map<VNString, chakra::IChakraEntity*> EntityIDMap;
	typedef std::pair<VNString, chakra::IChakraEntity*> IEntityPair;

	class World
	{
	public:
		World();
		~World();
		void doStep();
		void start();
		void stop();
		void addEntity(chakra::IChakraEntity* entity);
		void addUpdater(IUpdater* updater);
		const vnav::RoadNetwork* getRoadNetwork();
	protected:
	private:
		Updaters m_updaters;
		EntityIDMap m_existingEntityIDMap;
		//EventQueue* m_eventQueue;
	};

}

#endif